---@class GT.cir_area 圆形区域
---@field cir_area CirArea 圆形区域
GT.cir_area=class(GT.area,false)

---@class cir_area_data
---@field cir_area CirArea

function GT.cir_area:ctor(data)
    self.cir_area=data.cir_area
    data.area=self.cir_area
    super(self,data)
end
--- 通过区域ID返回圆形区域
---@param res_id AreaID 区域ID
---@return GT.cir_area
function GT.cir_area.get_circle_area_by_res_id(res_id)
    ---@type cir_area_data
    local data = {
        cir_area = game_api.get_circle_area_by_res_id(res_id)
    }
    return new(GT.cir_area, data)
end
--- 创建圆形区域
---@param point FVector3 中心点
---@param radius Fixed 半径
---@return GT.cir_area
function GT.cir_area.create_new_cir_area(point,radius)
    ---@type cir_area_data
    local data = {
        cir_area = game_api.create_new_cir_area(point,radius)
    }
    return new(GT.cir_area, data)
end

--- 根据tag获取对应的圆形区域
---@param tag Str tag
---@return GT.cir_area
function GT.cir_area.get_cir_areas_by_tag(tag)
    ---@type cir_area_data
    local data = {
        cir_area = game_api.get_cir_areas_by_tag(tag)
    }
    return new(GT.cir_area, data)
end


--- 设置圆形区域大小
---@param radius Fixed 半径
function GT.cir_area:set_cir_area_radius(radius)
    game_api.set_cir_area_radius(self.cir_area,radius)
end

--- 获取圆形区域半径
---@return Fixed
function GT.cir_area:get_circle_area_radius()
    return game_api.get_circle_area_radius(self.cir_area)
end

--- 获取圆形区域内最小X坐标
---@return Fixed
function GT.cir_area:get_circle_area_min_x(area)
    return game_api.get_circle_area_min_x(self.cir_area)
end

--- 获取圆形区域内最小y坐标
---@return Fixed
function GT.cir_area:get_circle_area_min_y(area)
    return game_api.get_circle_area_min_y(self.cir_area)
end

--- 获取圆形区域内最大X坐标
---@return Fixed
function GT.cir_area:get_circle_area_max_x(area)
    return game_api.get_circle_area_max_x(self.cir_area)
end

--- 获取圆形区域内最大y坐标
---@return Fixed
function GT.cir_area:get_circle_area_max_y(area)
    return game_api.get_circle_area_max_y(self.cir_area)
end


--- 点是否在圆形区域内
---@param point FPoint 点
---@return Bool
function GT.cir_area:judge_point_in_cir_area(point)
    return game_api.judge_point_in_cir_area(point,self.cir_area)
end

--- 圆形区域内单位数量
---@param area CirArea 圆形区域
---@return UInt32
function GT.cir_area:get_unit_num_in_cir_area()
    return game_api.get_unit_num_in_cir_area(self.cir_area)
end


--- 圆形区域内所有未销毁单位
---@param area CirArea 圆形区域
---@return UnitGroup
function GT.cir_area:get_unit_group_in_cir_area()
    return game_api.get_unit_group_in_cir_area(self.cir_area)
end


--- 圆形区域内所有物品
---@return ItemGroup
function GT.cir_area:get_item_group_in_cir_area()
    return game_api.get_item_group_in_cir_area(self.cir_area)
end


--- 圆形区域是否拥有某tags
---@param tag Str tag
---@return Bool
function GT.cir_area:if_cir_area_has_tag(area,tag)

    return game_api.if_cir_area_has_tag(self.cir_area,tag)
end


--- 设置圆形区域内视野情况
---@param player Role 玩家
---@param is_vision Bool 布尔变量
---@param is_vision_true Bool 布尔变量
---@return GT.cir_area
function GT.cir_area:set_circle_vision_visibility(player,is_vision,is_vision_true)
    game_api.set_circle_vision_visibility(self.cir_area,player,is_vision,is_vision_true)
    return GT.cir_area
end

--- 圆形区域是否存在
---@param circle_area CirArea 圆形区域
---@return Bool
function GT.cir_area.circle_area_is_exist(circle_area)
    return game_api.circle_area_is_exist(circle_area)
end


--- 最近创建的圆型区域
---@return GT.cir_area
function GT.cir_area.get_cir_area_last_created()

    ---@type cir_area_data
    local data = {
        cir_area = game_api.get_cir_area_last_created()
    }
    return new(GT.cir_area, data)

end

--- 返回圆形区域内随机点
---@return GT.point
function GT.cir_area:get_random_point_in_circular_area()
    ---@type point_data
    local data = {
        point = globalapi.get_random_point_in_circular_area(self.cir_area)
    }
    return new(GT.point, data)
end

--- 返回圆形区域中心点
---@param cir CirArea 圆形区域
---@return  GT.point
function GT.cir_area:get_circle_center_point(cir)
    ---@type point_data
    local data = {
        point = globalapi.get_circle_center_point(self.cir_area)
    }
    return new(GT.point, data)

end
